# 模块概览
nodejs的核心模块,基本上都是stream的的实例,比如process.stdout、http.clientRequest。
对于大部分的nodejs开发者来说,平常并不会直接用到stream模块,只需要了解stream的运行机制即可(非常重要)。
而对于想要实现自定义stream实例的开发者来说,就得好好研究stream的扩展API了,比如gulp的内部实现就大量用到了自定义的stream类型。
来个简单的例子镇楼,几行代码就实现了读取文件内容,并打印到控制台:
const fs = require('fs');
fs.createReadStream('./sample.txt').pipe(process.stdout);
@前端进阶之旅: 代码已经复制到剪贴板
# Stream分类
在nodejs中,有四种stream类型:
- Readable:用来读取数据,比如
fs.createReadStream()。 - Writable:用来写数据,比如
fs.createWriteStream()。 - Duplex:可读+可写,比如
net.Socket()。 - Transform:在读写的过程中,可以对数据进行修改,比如
zlib.createDeflate()(数据压缩/解压)。
# Readable Stream
以下都是nodejs中常见的Readable Stream,当然还有其他的,可自行查看文档。
- http.IncomingRequest
- fs.createReadStream()
- process.stdin
- 其他
例子一:
var fs = require('fs');
fs.readFile('./sample.txt', 'utf8', function(err, content){
// 文件读取完成,文件内容是 [你好,我是程序员poetry]
console.log('文件读取完成,文件内容是 [%s]', content);
});
@前端进阶之旅: 代码已经复制到剪贴板
例子二:
var fs = require('fs');
var readStream = fs.createReadStream('./sample.txt');
var content = '';
readStream.setEncoding('utf8');
readStream.on('data', function(chunk){
content += chunk;
});
readStream.on('end', function(chunk){
// 文件读取完成,文件内容是 [你好,我是程序员poetry]
console.log('文件读取完成,文件内容是 [%s]', content);
});
